home *** CD-ROM | disk | FTP | other *** search
- #define EXTERN extern
- #include "texd.h"
-
- void flushmath ( )
- {flushmath_regmem
- flushnodelist ( mem [ curlist .headfield ] .hh .v.RH ) ;
- flushnodelist ( curlist .auxfield .cint ) ;
- mem [ curlist .headfield ] .hh .v.RH = 0 ;
- curlist .tailfield = curlist .headfield ;
- curlist .auxfield .cint = 0 ;
- }
- halfword zcleanbox ( p , s )
- halfword p ;
- smallnumber s ;
- {/* 40 */ register halfword Result; cleanbox_regmem
- halfword q ;
- smallnumber savestyle ;
- halfword x ;
- halfword r ;
- switch ( mem [ p ] .hh .v.RH )
- {case 1 :
- {
- curmlist = newnoad () ;
- mem [ curmlist + 1 ] = mem [ p ] ;
- }
- break ;
- case 2 :
- {
- q = mem [ p ] .hh .v.LH ;
- goto lab40 ;
- }
- break ;
- case 3 :
- curmlist = mem [ p ] .hh .v.LH ;
- break ;
- default:
- {
- q = newnullbox () ;
- goto lab40 ;
- }
- break ;
- }
- savestyle = curstyle ;
- curstyle = s ;
- mlistpenalties = false ;
- mlisttohlist () ;
- q = mem [ memtop - 3 ] .hh .v.RH ;
- curstyle = savestyle ;
- {
- if ( curstyle < 4 )
- cursize = 0 ;
- else cursize = 16 * ( ( curstyle - 2 ) / 2 ) ;
- curmu = xovern ( fontinfo [ 6 + parambase [ eqtb [ 4837 + cursize ] .hh
- .v.RH ] ] .cint , 18 ) ;
- }
- lab40: if ( ( q >= himemmin ) || ( q == 0 ) )
- x = hpack ( q , 0 , 1 ) ;
- else if ( ( mem [ q ] .hh .v.RH == 0 ) && ( mem [ q ] .hh.b0 <= 1 ) && ( mem
- [ q + 4 ] .cint == 0 ) )
- x = q ;
- else x = hpack ( q , 0 , 1 ) ;
- q = mem [ x + 5 ] .hh .v.RH ;
- if ( ( q >= himemmin ) )
- {
- r = mem [ q ] .hh .v.RH ;
- if ( r != 0 )
- if ( mem [ r ] .hh .v.RH == 0 )
- if ( ! ( r >= himemmin ) )
- if ( mem [ r ] .hh.b0 == 11 )
- {
- freenode ( r , 2 ) ;
- mem [ q ] .hh .v.RH = 0 ;
- }
- }
- Result = x ;
- return(Result) ;
- }
- void zfetch ( a )
- halfword a ;
- {fetch_regmem
- curc = mem [ a ] .hh.b1 ;
- curf = eqtb [ 4835 + mem [ a ] .hh.b0 + cursize ] .hh .v.RH ;
- if ( curf == 0 )
- {
- {
- if ( interaction == 3 )
- wakeupterminal () ;
- printnl ( 262 ) ;
- print ( 335 ) ;
- }
- printsize ( cursize ) ;
- printchar ( 32 ) ;
- printint ( mem [ a ] .hh.b0 ) ;
- print ( 877 ) ;
- print ( curc ) ;
- printchar ( 41 ) ;
- {
- helpptr = 4 ;
- helpline [ 3 ] = 878 ;
- helpline [ 2 ] = 879 ;
- helpline [ 1 ] = 880 ;
- helpline [ 0 ] = 881 ;
- }
- error () ;
- curi = nullcharacter ;
- mem [ a ] .hh .v.RH = 0 ;
- }
- else {
-
- if ( ( curc >= fontbc [ curf ] ) && ( curc <= fontec [ curf ] ) )
- curi = fontinfo [ charbase [ curf ] + curc ] .qqqq ;
- else curi = nullcharacter ;
- if ( ! ( ( curi .b0 > 0 ) ) )
- {
- charwarning ( curf , curc ) ;
- mem [ a ] .hh .v.RH = 0 ;
- }
- }
- }
- void zmakeover ( q )
- halfword q ;
- {makeover_regmem
- mem [ q + 1 ] .hh .v.LH = overbar ( cleanbox ( q + 1 , 2 * ( curstyle / 2 )
- + 1 ) , 3 * fontinfo [ 8 + parambase [ eqtb [ 4838 + cursize ] .hh .v.RH ] ]
- .cint , fontinfo [ 8 + parambase [ eqtb [ 4838 + cursize ] .hh .v.RH ] ]
- .cint ) ;
- mem [ q + 1 ] .hh .v.RH = 2 ;
- }
- void zmakeunder ( q )
- halfword q ;
- {makeunder_regmem
- halfword p, x, y ;
- scaled delta ;
- x = cleanbox ( q + 1 , curstyle ) ;
- p = newkern ( 3 * fontinfo [ 8 + parambase [ eqtb [ 4838 + cursize ] .hh
- .v.RH ] ] .cint ) ;
- mem [ x ] .hh .v.RH = p ;
- mem [ p ] .hh .v.RH = fractionrule ( fontinfo [ 8 + parambase [ eqtb [ 4838
- + cursize ] .hh .v.RH ] ] .cint ) ;
- y = vpackage ( x , 0 , 1 , 1073741823L ) ;
- delta = mem [ y + 3 ] .cint + mem [ y + 2 ] .cint + fontinfo [ 8 + parambase
- [ eqtb [ 4838 + cursize ] .hh .v.RH ] ] .cint ;
- mem [ y + 3 ] .cint = mem [ x + 3 ] .cint ;
- mem [ y + 2 ] .cint = delta - mem [ y + 3 ] .cint ;
- mem [ q + 1 ] .hh .v.LH = y ;
- mem [ q + 1 ] .hh .v.RH = 2 ;
- }
- void zmakevcenter ( q )
- halfword q ;
- {makevcenter_regmem
- halfword v ;
- scaled delta ;
- v = mem [ q + 1 ] .hh .v.LH ;
- if ( mem [ v ] .hh.b0 != 1 )
- confusion ( 535 ) ;
- delta = mem [ v + 3 ] .cint + mem [ v + 2 ] .cint ;
- mem [ v + 3 ] .cint = fontinfo [ 22 + parambase [ eqtb [ 4837 + cursize ]
- .hh .v.RH ] ] .cint + half ( delta ) ;
- mem [ v + 2 ] .cint = delta - mem [ v + 3 ] .cint ;
- }
- void zmakeradical ( q )
- halfword q ;
- {makeradical_regmem
- halfword x, y ;
- scaled delta, clr ;
- x = cleanbox ( q + 1 , 2 * ( curstyle / 2 ) + 1 ) ;
- if ( curstyle < 2 )
- clr = fontinfo [ 8 + parambase [ eqtb [ 4838 + cursize ] .hh .v.RH ] ] .cint
- + ( abs ( fontinfo [ 5 + parambase [ eqtb [ 4837 + cursize ] .hh .v.RH ] ]
- .cint ) / 4 ) ;
- else {
-
- clr = fontinfo [ 8 + parambase [ eqtb [ 4838 + cursize ] .hh .v.RH ] ]
- .cint ;
- clr = clr + ( abs ( clr ) / 4 ) ;
- }
- y = vardelimiter ( q + 4 , cursize , mem [ x + 3 ] .cint + mem [ x + 2 ]
- .cint + clr + fontinfo [ 8 + parambase [ eqtb [ 4838 + cursize ] .hh .v.RH ]
- ] .cint ) ;
- delta = mem [ y + 2 ] .cint - ( mem [ x + 3 ] .cint + mem [ x + 2 ] .cint +
- clr ) ;
- if ( delta > 0 )
- clr = clr + half ( delta ) ;
- mem [ y + 4 ] .cint = - (integer) ( mem [ x + 3 ] .cint + clr ) ;
- mem [ y ] .hh .v.RH = overbar ( x , clr , mem [ y + 3 ] .cint ) ;
- mem [ q + 1 ] .hh .v.LH = hpack ( y , 0 , 1 ) ;
- mem [ q + 1 ] .hh .v.RH = 2 ;
- }
- void zmakemathaccent ( q )
- halfword q ;
- {/* 30 31 */ makemathaccent_regmem
- halfword p, x, y ;
- integer a ;
- quarterword c ;
- internalfontnumber f ;
- fourquarters i ;
- scaled s ;
- scaled h ;
- scaled delta ;
- scaled w ;
- fetch ( q + 4 ) ;
- if ( ( curi .b0 > 0 ) )
- {
- i = curi ;
- c = curc ;
- f = curf ;
- s = 0 ;
- if ( mem [ q + 1 ] .hh .v.RH == 1 )
- {
- fetch ( q + 1 ) ;
- if ( ( ( curi .b2 ) % 4 ) == 1 )
- {
- a = ligkernbase [ curf ] + curi .b3 ;
- curi = fontinfo [ a ] .qqqq ;
- if ( curi .b0 > 128 )
- {
- a = ligkernbase [ curf ] + 256 * curi .b2 + curi .b3 + 32768L - 256
- * ( 128 ) ;
- curi = fontinfo [ a ] .qqqq ;
- }
- while ( true ) {
-
- if ( curi .b1 == skewchar [ curf ] )
- {
- if ( curi .b2 >= 128 )
- if ( curi .b0 <= 128 )
- s = fontinfo [ kernbase [ curf ] + 256 * curi .b2 + curi .b3 ]
- .cint ;
- goto lab31 ;
- }
- if ( curi .b0 >= 128 )
- goto lab31 ;
- a = a + curi .b0 + 1 ;
- curi = fontinfo [ a ] .qqqq ;
- }
- }
- }
- lab31: ;
- x = cleanbox ( q + 1 , 2 * ( curstyle / 2 ) + 1 ) ;
- w = mem [ x + 1 ] .cint ;
- h = mem [ x + 3 ] .cint ;
- while ( true ) {
-
- if ( ( ( i .b2 ) % 4 ) != 2 )
- goto lab30 ;
- y = i .b3 ;
- i = fontinfo [ charbase [ f ] + y ] .qqqq ;
- if ( ! ( i .b0 > 0 ) )
- goto lab30 ;
- if ( fontinfo [ widthbase [ f ] + i .b0 ] .cint > w )
- goto lab30 ;
- c = y ;
- }
- lab30: ;
- if ( h < fontinfo [ 5 + parambase [ f ] ] .cint )
- delta = h ;
- else delta = fontinfo [ 5 + parambase [ f ] ] .cint ;
- if ( ( mem [ q + 2 ] .hh .v.RH != 0 ) || ( mem [ q + 3 ] .hh .v.RH != 0 )
- )
- if ( mem [ q + 1 ] .hh .v.RH == 1 )
- {
- flushnodelist ( x ) ;
- x = newnoad () ;
- mem [ x + 1 ] = mem [ q + 1 ] ;
- mem [ x + 2 ] = mem [ q + 2 ] ;
- mem [ x + 3 ] = mem [ q + 3 ] ;
- mem [ q + 2 ] .hh = emptyfield ;
- mem [ q + 3 ] .hh = emptyfield ;
- mem [ q + 1 ] .hh .v.RH = 3 ;
- mem [ q + 1 ] .hh .v.LH = x ;
- x = cleanbox ( q + 1 , curstyle ) ;
- delta = delta + mem [ x + 3 ] .cint - h ;
- h = mem [ x + 3 ] .cint ;
- }
- y = charbox ( f , c ) ;
- mem [ y + 4 ] .cint = s + half ( w - mem [ y + 1 ] .cint ) ;
- mem [ y + 1 ] .cint = 0 ;
- p = newkern ( - (integer) delta ) ;
- mem [ p ] .hh .v.RH = x ;
- mem [ y ] .hh .v.RH = p ;
- y = vpackage ( y , 0 , 1 , 1073741823L ) ;
- mem [ y + 1 ] .cint = mem [ x + 1 ] .cint ;
- if ( mem [ y + 3 ] .cint < h )
- {
- p = newkern ( h - mem [ y + 3 ] .cint ) ;
- mem [ p ] .hh .v.RH = mem [ y + 5 ] .hh .v.RH ;
- mem [ y + 5 ] .hh .v.RH = p ;
- mem [ y + 3 ] .cint = h ;
- }
- mem [ q + 1 ] .hh .v.LH = y ;
- mem [ q + 1 ] .hh .v.RH = 2 ;
- }
- }
- void zmakefraction ( q )
- halfword q ;
- {makefraction_regmem
- halfword p, v, x, y, z ;
- scaled delta, delta1, delta2, shiftup, shiftdown, clr ;
- if ( mem [ q + 1 ] .cint == 1073741824L )
- mem [ q + 1 ] .cint = fontinfo [ 8 + parambase [ eqtb [ 4838 + cursize ] .hh
- .v.RH ] ] .cint ;
- x = cleanbox ( q + 2 , curstyle + 2 - 2 * ( curstyle / 6 ) ) ;
- z = cleanbox ( q + 3 , 2 * ( curstyle / 2 ) + 3 - 2 * ( curstyle / 6 ) ) ;
- if ( mem [ x + 1 ] .cint < mem [ z + 1 ] .cint )
- x = rebox ( x , mem [ z + 1 ] .cint ) ;
- else z = rebox ( z , mem [ x + 1 ] .cint ) ;
- if ( curstyle < 2 )
- {
- shiftup = fontinfo [ 8 + parambase [ eqtb [ 4837 + cursize ] .hh .v.RH ] ]
- .cint ;
- shiftdown = fontinfo [ 11 + parambase [ eqtb [ 4837 + cursize ] .hh .v.RH
- ] ] .cint ;
- }
- else {
-
- shiftdown = fontinfo [ 12 + parambase [ eqtb [ 4837 + cursize ] .hh .v.RH
- ] ] .cint ;
- if ( mem [ q + 1 ] .cint != 0 )
- shiftup = fontinfo [ 9 + parambase [ eqtb [ 4837 + cursize ] .hh .v.RH ] ]
- .cint ;
- else shiftup = fontinfo [ 10 + parambase [ eqtb [ 4837 + cursize ] .hh
- .v.RH ] ] .cint ;
- }
- if ( mem [ q + 1 ] .cint == 0 )
- {
- if ( curstyle < 2 )
- clr = 7 * fontinfo [ 8 + parambase [ eqtb [ 4838 + cursize ] .hh .v.RH ] ]
- .cint ;
- else clr = 3 * fontinfo [ 8 + parambase [ eqtb [ 4838 + cursize ] .hh
- .v.RH ] ] .cint ;
- delta = half ( clr - ( ( shiftup - mem [ x + 2 ] .cint ) - ( mem [ z + 3 ]
- .cint - shiftdown ) ) ) ;
- if ( delta > 0 )
- {
- shiftup = shiftup + delta ;
- shiftdown = shiftdown + delta ;
- }
- }
- else {
-
- if ( curstyle < 2 )
- clr = 3 * mem [ q + 1 ] .cint ;
- else clr = mem [ q + 1 ] .cint ;
- delta = half ( mem [ q + 1 ] .cint ) ;
- delta1 = clr - ( ( shiftup - mem [ x + 2 ] .cint ) - ( fontinfo [ 22 +
- parambase [ eqtb [ 4837 + cursize ] .hh .v.RH ] ] .cint + delta ) ) ;
- delta2 = clr - ( ( fontinfo [ 22 + parambase [ eqtb [ 4837 + cursize ] .hh
- .v.RH ] ] .cint - delta ) - ( mem [ z + 3 ] .cint - shiftdown ) ) ;
- if ( delta1 > 0 )
- shiftup = shiftup + delta1 ;
- if ( delta2 > 0 )
- shiftdown = shiftdown + delta2 ;
- }
- v = newnullbox () ;
- mem [ v ] .hh.b0 = 1 ;
- mem [ v + 3 ] .cint = shiftup + mem [ x + 3 ] .cint ;
- mem [ v + 2 ] .cint = mem [ z + 2 ] .cint + shiftdown ;
- mem [ v + 1 ] .cint = mem [ x + 1 ] .cint ;
- if ( mem [ q + 1 ] .cint == 0 )
- {
- p = newkern ( ( shiftup - mem [ x + 2 ] .cint ) - ( mem [ z + 3 ] .cint -
- shiftdown ) ) ;
- mem [ p ] .hh .v.RH = z ;
- }
- else {
-
- y = fractionrule ( mem [ q + 1 ] .cint ) ;
- p = newkern ( ( fontinfo [ 22 + parambase [ eqtb [ 4837 + cursize ] .hh
- .v.RH ] ] .cint - delta ) - ( mem [ z + 3 ] .cint - shiftdown ) ) ;
- mem [ y ] .hh .v.RH = p ;
- mem [ p ] .hh .v.RH = z ;
- p = newkern ( ( shiftup - mem [ x + 2 ] .cint ) - ( fontinfo [ 22 +
- parambase [ eqtb [ 4837 + cursize ] .hh .v.RH ] ] .cint + delta ) ) ;
- mem [ p ] .hh .v.RH = y ;
- }
- mem [ x ] .hh .v.RH = p ;
- mem [ v + 5 ] .hh .v.RH = x ;
- if ( curstyle < 2 )
- delta = fontinfo [ 20 + parambase [ eqtb [ 4837 + cursize ] .hh .v.RH ] ]
- .cint ;
- else delta = fontinfo [ 21 + parambase [ eqtb [ 4837 + cursize ] .hh .v.RH ]
- ] .cint ;
- x = vardelimiter ( q + 4 , cursize , delta ) ;
- mem [ x ] .hh .v.RH = v ;
- z = vardelimiter ( q + 5 , cursize , delta ) ;
- mem [ v ] .hh .v.RH = z ;
- mem [ q + 1 ] .cint = hpack ( x , 0 , 1 ) ;
- }
- scaled zmakeop ( q )
- halfword q ;
- {register scaled Result; makeop_regmem
- scaled delta ;
- halfword p, v, x, y, z ;
- quarterword c ;
- fourquarters i ;
- scaled shiftup, shiftdown ;
- if ( ( mem [ q ] .hh.b1 == 0 ) && ( curstyle < 2 ) )
- mem [ q ] .hh.b1 = 1 ;
- if ( mem [ q + 1 ] .hh .v.RH == 1 )
- {
- fetch ( q + 1 ) ;
- if ( ( curstyle < 2 ) && ( ( ( curi .b2 ) % 4 ) == 2 ) )
- {
- c = curi .b3 ;
- i = fontinfo [ charbase [ curf ] + c ] .qqqq ;
- if ( ( i .b0 > 0 ) )
- {
- curc = c ;
- curi = i ;
- mem [ q + 1 ] .hh.b1 = c ;
- }
- }
- delta = fontinfo [ italicbase [ curf ] + ( curi .b2 ) / 4 ] .cint ;
- x = cleanbox ( q + 1 , curstyle ) ;
- if ( ( mem [ q + 3 ] .hh .v.RH != 0 ) && ( mem [ q ] .hh.b1 != 1 ) )
- mem [ x + 1 ] .cint = mem [ x + 1 ] .cint - delta ;
- mem [ x + 4 ] .cint = half ( mem [ x + 3 ] .cint - mem [ x + 2 ] .cint ) -
- fontinfo [ 22 + parambase [ eqtb [ 4837 + cursize ] .hh .v.RH ] ] .cint ;
- mem [ q + 1 ] .hh .v.RH = 2 ;
- mem [ q + 1 ] .hh .v.LH = x ;
- }
- else delta = 0 ;
- if ( mem [ q ] .hh.b1 == 1 )
- {
- x = cleanbox ( q + 2 , 2 * ( curstyle / 4 ) + 4 + ( curstyle % 2 ) ) ;
- y = cleanbox ( q + 1 , curstyle ) ;
- z = cleanbox ( q + 3 , 2 * ( curstyle / 4 ) + 5 ) ;
- v = newnullbox () ;
- mem [ v ] .hh.b0 = 1 ;
- mem [ v + 1 ] .cint = mem [ y + 1 ] .cint ;
- if ( mem [ x + 1 ] .cint > mem [ v + 1 ] .cint )
- mem [ v + 1 ] .cint = mem [ x + 1 ] .cint ;
- if ( mem [ z + 1 ] .cint > mem [ v + 1 ] .cint )
- mem [ v + 1 ] .cint = mem [ z + 1 ] .cint ;
- x = rebox ( x , mem [ v + 1 ] .cint ) ;
- y = rebox ( y , mem [ v + 1 ] .cint ) ;
- z = rebox ( z , mem [ v + 1 ] .cint ) ;
- mem [ x + 4 ] .cint = half ( delta ) ;
- mem [ z + 4 ] .cint = - (integer) mem [ x + 4 ] .cint ;
- mem [ v + 3 ] .cint = mem [ y + 3 ] .cint ;
- mem [ v + 2 ] .cint = mem [ y + 2 ] .cint ;
- if ( mem [ q + 2 ] .hh .v.RH == 0 )
- {
- freenode ( x , 7 ) ;
- mem [ v + 5 ] .hh .v.RH = y ;
- }
- else {
-
- shiftup = fontinfo [ 11 + parambase [ eqtb [ 4838 + cursize ] .hh .v.RH
- ] ] .cint - mem [ x + 2 ] .cint ;
- if ( shiftup < fontinfo [ 9 + parambase [ eqtb [ 4838 + cursize ] .hh
- .v.RH ] ] .cint )
- shiftup = fontinfo [ 9 + parambase [ eqtb [ 4838 + cursize ] .hh .v.RH ]
- ] .cint ;
- p = newkern ( shiftup ) ;
- mem [ p ] .hh .v.RH = y ;
- mem [ x ] .hh .v.RH = p ;
- p = newkern ( fontinfo [ 13 + parambase [ eqtb [ 4838 + cursize ] .hh
- .v.RH ] ] .cint ) ;
- mem [ p ] .hh .v.RH = x ;
- mem [ v + 5 ] .hh .v.RH = p ;
- mem [ v + 3 ] .cint = mem [ v + 3 ] .cint + fontinfo [ 13 + parambase [
- eqtb [ 4838 + cursize ] .hh .v.RH ] ] .cint + mem [ x + 3 ] .cint + mem
- [ x + 2 ] .cint + shiftup ;
- }
- if ( mem [ q + 3 ] .hh .v.RH == 0 )
- freenode ( z , 7 ) ;
- else {
-
- shiftdown = fontinfo [ 12 + parambase [ eqtb [ 4838 + cursize ] .hh
- .v.RH ] ] .cint - mem [ z + 3 ] .cint ;
- if ( shiftdown < fontinfo [ 10 + parambase [ eqtb [ 4838 + cursize ] .hh
- .v.RH ] ] .cint )
- shiftdown = fontinfo [ 10 + parambase [ eqtb [ 4838 + cursize ] .hh
- .v.RH ] ] .cint ;
- p = newkern ( shiftdown ) ;
- mem [ y ] .hh .v.RH = p ;
- mem [ p ] .hh .v.RH = z ;
- p = newkern ( fontinfo [ 13 + parambase [ eqtb [ 4838 + cursize ] .hh
- .v.RH ] ] .cint ) ;
- mem [ z ] .hh .v.RH = p ;
- mem [ v + 2 ] .cint = mem [ v + 2 ] .cint + fontinfo [ 13 + parambase [
- eqtb [ 4838 + cursize ] .hh .v.RH ] ] .cint + mem [ z + 3 ] .cint + mem
- [ z + 2 ] .cint + shiftdown ;
- }
- mem [ q + 1 ] .cint = v ;
- }
- Result = delta ;
- return(Result) ;
- }
- void zmakeord ( q )
- halfword q ;
- {/* 20 10 */ makeord_regmem
- integer a ;
- halfword p, r ;
- lab20: if ( mem [ q + 3 ] .hh .v.RH == 0 )
- if ( mem [ q + 2 ] .hh .v.RH == 0 )
- if ( mem [ q + 1 ] .hh .v.RH == 1 )
- {
- p = mem [ q ] .hh .v.RH ;
- if ( p != 0 )
- if ( ( mem [ p ] .hh.b0 >= 16 ) && ( mem [ p ] .hh.b0 <= 22 ) )
- if ( mem [ p + 1 ] .hh .v.RH == 1 )
- if ( mem [ p + 1 ] .hh.b0 == mem [ q + 1 ] .hh.b0 )
- {
- mem [ q + 1 ] .hh .v.RH = 4 ;
- fetch ( q + 1 ) ;
- if ( ( ( curi .b2 ) % 4 ) == 1 )
- {
- a = ligkernbase [ curf ] + curi .b3 ;
- curc = mem [ p + 1 ] .hh.b1 ;
- curi = fontinfo [ a ] .qqqq ;
- if ( curi .b0 > 128 )
- {
- a = ligkernbase [ curf ] + 256 * curi .b2 + curi .b3 + 32768L - 256
- * ( 128 ) ;
- curi = fontinfo [ a ] .qqqq ;
- }
- while ( true ) {
-
- if ( curi .b1 == curc )
- if ( curi .b0 <= 128 )
- if ( curi .b2 >= 128 )
- {
- p = newkern ( fontinfo [ kernbase [ curf ] + 256 * curi .b2 + curi
- .b3 ] .cint ) ;
- mem [ p ] .hh .v.RH = mem [ q ] .hh .v.RH ;
- mem [ q ] .hh .v.RH = p ;
- return ;
- }
- else {
-
- {
- if ( interrupt != 0 )
- pauseforinstructions () ;
- }
- switch ( curi .b2 )
- {case 1 :
- case 5 :
- mem [ q + 1 ] .hh.b1 = curi .b3 ;
- break ;
- case 2 :
- case 6 :
- mem [ p + 1 ] .hh.b1 = curi .b3 ;
- break ;
- case 3 :
- case 7 :
- case 11 :
- {
- r = newnoad () ;
- mem [ r + 1 ] .hh.b1 = curi .b3 ;
- mem [ r + 1 ] .hh.b0 = mem [ q + 1 ] .hh.b0 ;
- mem [ q ] .hh .v.RH = r ;
- mem [ r ] .hh .v.RH = p ;
- if ( curi .b2 < 11 )
- mem [ r + 1 ] .hh .v.RH = 1 ;
- else mem [ r + 1 ] .hh .v.RH = 4 ;
- }
- break ;
- default:
- {
- mem [ q ] .hh .v.RH = mem [ p ] .hh .v.RH ;
- mem [ q + 1 ] .hh.b1 = curi .b3 ;
- mem [ q + 3 ] = mem [ p + 3 ] ;
- mem [ q + 2 ] = mem [ p + 2 ] ;
- freenode ( p , 4 ) ;
- }
- break ;
- }
- if ( curi .b2 > 3 )
- return ;
- mem [ q + 1 ] .hh .v.RH = 1 ;
- goto lab20 ;
- }
- if ( curi .b0 >= 128 )
- return ;
- a = a + curi .b0 + 1 ;
- curi = fontinfo [ a ] .qqqq ;
- }
- }
- }
- }
- }
- void zmakescripts ( q , delta )
- halfword q ;
- scaled delta ;
- {makescripts_regmem
- halfword p, x, y, z ;
- scaled shiftup, shiftdown, clr ;
- smallnumber t ;
- p = mem [ q + 1 ] .cint ;
- if ( ( p >= himemmin ) )
- {
- shiftup = 0 ;
- shiftdown = 0 ;
- }
- else {
-
- z = hpack ( p , 0 , 1 ) ;
- if ( curstyle < 4 )
- t = 16 ;
- else t = 32 ;
- shiftup = mem [ z + 3 ] .cint - fontinfo [ 18 + parambase [ eqtb [ 4837 +
- t ] .hh .v.RH ] ] .cint ;
- shiftdown = mem [ z + 2 ] .cint + fontinfo [ 19 + parambase [ eqtb [ 4837
- + t ] .hh .v.RH ] ] .cint ;
- freenode ( z , 7 ) ;
- }
- if ( mem [ q + 2 ] .hh .v.RH == 0 )
- {
- x = cleanbox ( q + 3 , 2 * ( curstyle / 4 ) + 5 ) ;
- mem [ x + 1 ] .cint = mem [ x + 1 ] .cint + eqtb [ 6742 ] .cint ;
- if ( shiftdown < fontinfo [ 16 + parambase [ eqtb [ 4837 + cursize ] .hh
- .v.RH ] ] .cint )
- shiftdown = fontinfo [ 16 + parambase [ eqtb [ 4837 + cursize ] .hh .v.RH
- ] ] .cint ;
- clr = mem [ x + 3 ] .cint - ( abs ( fontinfo [ 5 + parambase [ eqtb [ 4837
- + cursize ] .hh .v.RH ] ] .cint * 4 ) / 5 ) ;
- if ( shiftdown < clr )
- shiftdown = clr ;
- mem [ x + 4 ] .cint = shiftdown ;
- }
- else {
-
- {
- x = cleanbox ( q + 2 , 2 * ( curstyle / 4 ) + 4 + ( curstyle % 2 ) ) ;
- mem [ x + 1 ] .cint = mem [ x + 1 ] .cint + eqtb [ 6742 ] .cint ;
- if ( odd ( curstyle ) )
- clr = fontinfo [ 15 + parambase [ eqtb [ 4837 + cursize ] .hh .v.RH ] ]
- .cint ;
- else if ( curstyle < 2 )
- clr = fontinfo [ 13 + parambase [ eqtb [ 4837 + cursize ] .hh .v.RH ] ]
- .cint ;
- else clr = fontinfo [ 14 + parambase [ eqtb [ 4837 + cursize ] .hh .v.RH
- ] ] .cint ;
- if ( shiftup < clr )
- shiftup = clr ;
- clr = mem [ x + 2 ] .cint + ( abs ( fontinfo [ 5 + parambase [ eqtb [
- 4837 + cursize ] .hh .v.RH ] ] .cint ) / 4 ) ;
- if ( shiftup < clr )
- shiftup = clr ;
- }
- if ( mem [ q + 3 ] .hh .v.RH == 0 )
- mem [ x + 4 ] .cint = - (integer) shiftup ;
- else {
-
- y = cleanbox ( q + 3 , 2 * ( curstyle / 4 ) + 5 ) ;
- mem [ y + 1 ] .cint = mem [ y + 1 ] .cint + eqtb [ 6742 ] .cint ;
- if ( shiftdown < fontinfo [ 17 + parambase [ eqtb [ 4837 + cursize ] .hh
- .v.RH ] ] .cint )
- shiftdown = fontinfo [ 17 + parambase [ eqtb [ 4837 + cursize ] .hh
- .v.RH ] ] .cint ;
- clr = 4 * fontinfo [ 8 + parambase [ eqtb [ 4838 + cursize ] .hh .v.RH ]
- ] .cint - ( ( shiftup - mem [ x + 2 ] .cint ) - ( mem [ y + 3 ] .cint -
- shiftdown ) ) ;
- if ( clr > 0 )
- {
- shiftdown = shiftdown + clr ;
- clr = ( abs ( fontinfo [ 5 + parambase [ eqtb [ 4837 + cursize ] .hh
- .v.RH ] ] .cint * 4 ) / 5 ) - ( shiftup - mem [ x + 2 ] .cint ) ;
- if ( clr > 0 )
- {
- shiftup = shiftup + clr ;
- shiftdown = shiftdown - clr ;
- }
- }
- mem [ x + 4 ] .cint = delta ;
- p = newkern ( ( shiftup - mem [ x + 2 ] .cint ) - ( mem [ y + 3 ] .cint
- - shiftdown ) ) ;
- mem [ x ] .hh .v.RH = p ;
- mem [ p ] .hh .v.RH = y ;
- x = vpackage ( x , 0 , 1 , 1073741823L ) ;
- mem [ x + 4 ] .cint = shiftdown ;
- }
- }
- if ( mem [ q + 1 ] .cint == 0 )
- mem [ q + 1 ] .cint = x ;
- else {
-
- p = mem [ q + 1 ] .cint ;
- while ( mem [ p ] .hh .v.RH != 0 ) p = mem [ p ] .hh .v.RH ;
- mem [ p ] .hh .v.RH = x ;
- }
- }
- smallnumber zmakeleftright ( q , style , maxd , maxh )
- halfword q ;
- smallnumber style ;
- scaled maxd ;
- scaled maxh ;
- {register smallnumber Result; makeleftright_regmem
- scaled delta, delta1, delta2 ;
- if ( style < 4 )
- cursize = 0 ;
- else cursize = 16 * ( ( style - 2 ) / 2 ) ;
- delta2 = maxd + fontinfo [ 22 + parambase [ eqtb [ 4837 + cursize ] .hh
- .v.RH ] ] .cint ;
- delta1 = maxh + maxd - delta2 ;
- if ( delta2 > delta1 )
- delta1 = delta2 ;
- delta = ( delta1 / 500 ) * eqtb [ 6181 ] .cint ;
- delta2 = delta1 + delta1 - eqtb [ 6740 ] .cint ;
- if ( delta < delta2 )
- delta = delta2 ;
- mem [ q + 1 ] .cint = vardelimiter ( q + 1 , cursize , delta ) ;
- Result = mem [ q ] .hh.b0 - ( 10 ) ;
- return(Result) ;
- }
- void mlisttohlist ( )
- {/* 21 82 80 81 83 30 */ mlisttohlist_regmem
- halfword mlist ;
- boolean penalties ;
- smallnumber style ;
- smallnumber savestyle ;
- halfword q ;
- halfword r ;
- smallnumber rtype ;
- smallnumber t ;
- halfword p, x, y, z ;
- integer pen ;
- smallnumber s ;
- scaled maxh, maxd ;
- scaled delta ;
- mlist = curmlist ;
- penalties = mlistpenalties ;
- style = curstyle ;
- q = mlist ;
- r = 0 ;
- rtype = 17 ;
- maxh = 0 ;
- maxd = 0 ;
- {
- if ( curstyle < 4 )
- cursize = 0 ;
- else cursize = 16 * ( ( curstyle - 2 ) / 2 ) ;
- curmu = xovern ( fontinfo [ 6 + parambase [ eqtb [ 4837 + cursize ] .hh
- .v.RH ] ] .cint , 18 ) ;
- }
- while ( q != 0 ) {
-
- lab21: delta = 0 ;
- switch ( mem [ q ] .hh.b0 )
- {case 18 :
- switch ( rtype )
- {case 18 :
- case 17 :
- case 19 :
- case 20 :
- case 22 :
- case 30 :
- {
- mem [ q ] .hh.b0 = 16 ;
- goto lab21 ;
- }
- break ;
- default:
- ;
- break ;
- }
- break ;
- case 19 :
- case 21 :
- case 22 :
- case 31 :
- {
- if ( rtype == 18 )
- mem [ r ] .hh.b0 = 16 ;
- if ( mem [ q ] .hh.b0 == 31 )
- goto lab80 ;
- }
- break ;
- case 30 :
- goto lab80 ;
- break ;
- case 25 :
- {
- makefraction ( q ) ;
- goto lab82 ;
- }
- break ;
- case 17 :
- {
- delta = makeop ( q ) ;
- if ( mem [ q ] .hh.b1 == 1 )
- goto lab82 ;
- }
- break ;
- case 16 :
- makeord ( q ) ;
- break ;
- case 20 :
- case 23 :
- ;
- break ;
- case 24 :
- makeradical ( q ) ;
- break ;
- case 27 :
- makeover ( q ) ;
- break ;
- case 26 :
- makeunder ( q ) ;
- break ;
- case 28 :
- makemathaccent ( q ) ;
- break ;
- case 29 :
- makevcenter ( q ) ;
- break ;
- case 14 :
- {
- curstyle = mem [ q ] .hh.b1 ;
- {
- if ( curstyle < 4 )
- cursize = 0 ;
- else cursize = 16 * ( ( curstyle - 2 ) / 2 ) ;
- curmu = xovern ( fontinfo [ 6 + parambase [ eqtb [ 4837 + cursize ]
- .hh .v.RH ] ] .cint , 18 ) ;
- }
- goto lab81 ;
- }
- break ;
- case 15 :
- {
- switch ( curstyle / 2 )
- {case 0 :
- {
- p = mem [ q + 1 ] .hh .v.LH ;
- mem [ q + 1 ] .hh .v.LH = 0 ;
- }
- break ;
- case 1 :
- {
- p = mem [ q + 1 ] .hh .v.RH ;
- mem [ q + 1 ] .hh .v.RH = 0 ;
- }
- break ;
- case 2 :
- {
- p = mem [ q + 2 ] .hh .v.LH ;
- mem [ q + 2 ] .hh .v.LH = 0 ;
- }
- break ;
- case 3 :
- {
- p = mem [ q + 2 ] .hh .v.RH ;
- mem [ q + 2 ] .hh .v.RH = 0 ;
- }
- break ;
- }
- flushnodelist ( mem [ q + 1 ] .hh .v.LH ) ;
- flushnodelist ( mem [ q + 1 ] .hh .v.RH ) ;
- flushnodelist ( mem [ q + 2 ] .hh .v.LH ) ;
- flushnodelist ( mem [ q + 2 ] .hh .v.RH ) ;
- mem [ q ] .hh.b0 = 14 ;
- mem [ q ] .hh.b1 = curstyle ;
- mem [ q + 1 ] .cint = 0 ;
- mem [ q + 2 ] .cint = 0 ;
- if ( p != 0 )
- {
- z = mem [ q ] .hh .v.RH ;
- mem [ q ] .hh .v.RH = p ;
- while ( mem [ p ] .hh .v.RH != 0 ) p = mem [ p ] .hh .v.RH ;
- mem [ p ] .hh .v.RH = z ;
- }
- goto lab81 ;
- }
- break ;
- case 3 :
- case 4 :
- case 5 :
- case 8 :
- case 12 :
- case 7 :
- goto lab81 ;
- break ;
- case 2 :
- {
- if ( mem [ q + 3 ] .cint > maxh )
- maxh = mem [ q + 3 ] .cint ;
- if ( mem [ q + 2 ] .cint > maxd )
- maxd = mem [ q + 2 ] .cint ;
- goto lab81 ;
- }
- break ;
- case 10 :
- {
- if ( mem [ q ] .hh.b1 == 99 )
- {
- x = mem [ q + 1 ] .hh .v.LH ;
- y = mathglue ( x , curmu ) ;
- deleteglueref ( x ) ;
- mem [ q + 1 ] .hh .v.LH = y ;
- mem [ q ] .hh.b1 = 0 ;
- }
- else if ( ( cursize != 0 ) && ( mem [ q ] .hh.b1 == 98 ) )
- {
- p = mem [ q ] .hh .v.RH ;
- if ( p != 0 )
- if ( ( mem [ p ] .hh.b0 == 10 ) || ( mem [ p ] .hh.b0 == 11 ) )
- {
- mem [ q ] .hh .v.RH = mem [ p ] .hh .v.RH ;
- mem [ p ] .hh .v.RH = 0 ;
- flushnodelist ( p ) ;
- }
- }
- goto lab81 ;
- }
- break ;
- case 11 :
- {
- mathkern ( q , curmu ) ;
- goto lab81 ;
- }
- break ;
- default:
- confusion ( 882 ) ;
- break ;
- }
- switch ( mem [ q + 1 ] .hh .v.RH )
- {case 1 :
- case 4 :
- {
- fetch ( q + 1 ) ;
- if ( ( curi .b0 > 0 ) )
- {
- delta = fontinfo [ italicbase [ curf ] + ( curi .b2 ) / 4 ] .cint ;
- p = newcharacter ( curf , curc ) ;
- if ( ( mem [ q + 1 ] .hh .v.RH == 4 ) && ( fontinfo [ 2 + parambase
- [ curf ] ] .cint != 0 ) )
- delta = 0 ;
- if ( ( mem [ q + 3 ] .hh .v.RH == 0 ) && ( delta != 0 ) )
- {
- mem [ p ] .hh .v.RH = newkern ( delta ) ;
- delta = 0 ;
- }
- }
- else p = 0 ;
- }
- break ;
- case 0 :
- p = 0 ;
- break ;
- case 2 :
- p = mem [ q + 1 ] .hh .v.LH ;
- break ;
- case 3 :
- {
- curmlist = mem [ q + 1 ] .hh .v.LH ;
- savestyle = curstyle ;
- mlistpenalties = false ;
- mlisttohlist () ;
- curstyle = savestyle ;
- {
- if ( curstyle < 4 )
- cursize = 0 ;
- else cursize = 16 * ( ( curstyle - 2 ) / 2 ) ;
- curmu = xovern ( fontinfo [ 6 + parambase [ eqtb [ 4837 + cursize ]
- .hh .v.RH ] ] .cint , 18 ) ;
- }
- p = hpack ( mem [ memtop - 3 ] .hh .v.RH , 0 , 1 ) ;
- }
- break ;
- default:
- confusion ( 883 ) ;
- break ;
- }
- mem [ q + 1 ] .cint = p ;
- if ( ( mem [ q + 3 ] .hh .v.RH == 0 ) && ( mem [ q + 2 ] .hh .v.RH == 0 )
- )
- goto lab82 ;
- makescripts ( q , delta ) ;
- lab82: z = hpack ( mem [ q + 1 ] .cint , 0 , 1 ) ;
- if ( mem [ z + 3 ] .cint > maxh )
- maxh = mem [ z + 3 ] .cint ;
- if ( mem [ z + 2 ] .cint > maxd )
- maxd = mem [ z + 2 ] .cint ;
- freenode ( z , 7 ) ;
- lab80: r = q ;
- rtype = mem [ r ] .hh.b0 ;
- lab81: q = mem [ q ] .hh .v.RH ;
- }
- if ( rtype == 18 )
- mem [ r ] .hh.b0 = 16 ;
- p = memtop - 3 ;
- mem [ p ] .hh .v.RH = 0 ;
- q = mlist ;
- rtype = 0 ;
- curstyle = style ;
- {
- if ( curstyle < 4 )
- cursize = 0 ;
- else cursize = 16 * ( ( curstyle - 2 ) / 2 ) ;
- curmu = xovern ( fontinfo [ 6 + parambase [ eqtb [ 4837 + cursize ] .hh
- .v.RH ] ] .cint , 18 ) ;
- }
- while ( q != 0 ) {
-
- t = 16 ;
- s = 4 ;
- pen = 10000 ;
- switch ( mem [ q ] .hh.b0 )
- {case 17 :
- case 20 :
- case 21 :
- case 22 :
- case 23 :
- t = mem [ q ] .hh.b0 ;
- break ;
- case 18 :
- {
- t = 18 ;
- pen = eqtb [ 6172 ] .cint ;
- }
- break ;
- case 19 :
- {
- t = 19 ;
- pen = eqtb [ 6173 ] .cint ;
- }
- break ;
- case 16 :
- case 29 :
- case 27 :
- case 26 :
- ;
- break ;
- case 24 :
- s = 5 ;
- break ;
- case 28 :
- s = 5 ;
- break ;
- case 25 :
- {
- t = 23 ;
- s = 6 ;
- }
- break ;
- case 30 :
- case 31 :
- t = makeleftright ( q , style , maxd , maxh ) ;
- break ;
- case 14 :
- {
- curstyle = mem [ q ] .hh.b1 ;
- s = 3 ;
- {
- if ( curstyle < 4 )
- cursize = 0 ;
- else cursize = 16 * ( ( curstyle - 2 ) / 2 ) ;
- curmu = xovern ( fontinfo [ 6 + parambase [ eqtb [ 4837 + cursize ]
- .hh .v.RH ] ] .cint , 18 ) ;
- }
- goto lab83 ;
- }
- break ;
- case 8 :
- case 12 :
- case 2 :
- case 7 :
- case 5 :
- case 3 :
- case 4 :
- case 10 :
- case 11 :
- {
- mem [ p ] .hh .v.RH = q ;
- p = q ;
- q = mem [ q ] .hh .v.RH ;
- mem [ p ] .hh .v.RH = 0 ;
- goto lab30 ;
- }
- break ;
- default:
- confusion ( 884 ) ;
- break ;
- }
- if ( rtype > 0 )
- {
- switch ( strpool [ rtype * 8 + t + magicoffset ] )
- {case 48 :
- x = 0 ;
- break ;
- case 49 :
- if ( curstyle < 4 )
- x = 15 ;
- else x = 0 ;
- break ;
- case 50 :
- x = 15 ;
- break ;
- case 51 :
- if ( curstyle < 4 )
- x = 16 ;
- else x = 0 ;
- break ;
- case 52 :
- if ( curstyle < 4 )
- x = 17 ;
- else x = 0 ;
- break ;
- default:
- confusion ( 886 ) ;
- break ;
- }
- if ( x != 0 )
- {
- y = mathglue ( eqtb [ 3782 + x ] .hh .v.RH , curmu ) ;
- z = newglue ( y ) ;
- mem [ y ] .hh .v.RH = 0 ;
- mem [ p ] .hh .v.RH = z ;
- p = z ;
- mem [ z ] .hh.b1 = x + 1 ;
- }
- }
- if ( mem [ q + 1 ] .cint != 0 )
- {
- mem [ p ] .hh .v.RH = mem [ q + 1 ] .cint ;
- do {
- p = mem [ p ] .hh .v.RH ;
- } while ( ! ( mem [ p ] .hh .v.RH == 0 ) ) ;
- }
- if ( penalties )
- if ( mem [ q ] .hh .v.RH != 0 )
- if ( pen < 10000 )
- {
- rtype = mem [ mem [ q ] .hh .v.RH ] .hh.b0 ;
- if ( rtype != 12 )
- if ( rtype != 19 )
- {
- z = newpenalty ( pen ) ;
- mem [ p ] .hh .v.RH = z ;
- p = z ;
- }
- }
- rtype = t ;
- lab83: r = q ;
- q = mem [ q ] .hh .v.RH ;
- freenode ( r , s ) ;
- lab30: ;
- }
- }
-